/**
* \file GUIPlugin.h
* \brief GUIPlugin decleration class
* \author Edouard ROGE
* \date 24 Novembre 2013
*/
#ifndef _GUIPLUGIN_WIN32_
#define _GUIPLUGIN_WIN32_

#include <string>
#include "GUI.h"
#include "Core/Memory/HeapObject.h"
#include "Core/GUI/IGUIPlugin.h"

namespace GUI
{
	namespace Win32
	{
		class GUIPlugin : public Core::GUI::IGUIPlugin
		{
		public:

			/**
			* \fn GUIPlugin();
			* \brief Default contructor
			*/
			GUIPlugin();

			/**
			* \fn virtual ~GUIPlugin();
			* \brief Destructor
			*/
			virtual ~GUIPlugin();

			/**
			* \fn virtual const std::string & GetName() const;
			* \return Plug-in name
			* \brief Get the name of the plug-in
			*/
			GUI_WIN32 virtual const std::string & GetName() const;

			/**
			* \fn virtual IGUIContext * CreateContext() const;
			* \return a newly created network context
			* \brief Create a network context
			*/
			GUI_WIN32 virtual Core::GUI::IGUIContext * CreateContext() const;

			/**
			* \fn virtual void DestroyContext(IGUIContext * _pContext) const;
			* \param _pContext Network context to destroy
			* \brief Destroy the context in parameter, created before by this plugin
			*/
			GUI_WIN32 virtual void DestroyContext(Core::GUI::IGUIContext * _pContext) const;
		};
	}
}

EXPORT_PLUGIN(GUI::Win32::GUIPlugin)

#endif // _GUI_WIN32_
